#pragma once

#include "HSModelAPI.h"
#include "GeometryUtils.h"

#include <list>

class Triangle3D;
class Triangle3DID;

class Point3D
  {
  public:
    HSMODEL_API double GetX() const;
    HSMODEL_API double GetY() const;
    HSMODEL_API double GetZ() const;

    HSMODEL_API std::vector<const Triangle3D*> GetTriangles() const;
  private:
    Point3D() {};  // forbidden
    Point3D(double i_x, double i_y, double i_z);
    Point3D(const Point3D &i_other);

    friend class Model3D;
    friend class Triangle3D;
  private:
    TVector3 m_data;

    std::vector<const Triangle3D*> m_triangles;
  };

class Point3DID
  {
  private:
    Point3DID();
    Point3DID(Point3D* i_object);

    friend class Model3D;
    friend class Triangle3D;
  private:
    Point3D* m_object;
  };